package cn.tedu.csmall.all.adapter.service;

import cn.tedu.csmall.all.adapter.mapper.CartMapper;
import cn.tedu.csmall.all.service.ICartService;
import cn.tedu.csmall.commons.pojo.cart.dto.CartAddDTO;
import cn.tedu.csmall.commons.pojo.cart.entity.Cart;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

//@DubboService(loadbalance = "random" , weight=10)  //随机调用(权重越高，分配的请求越多)
//@DubboService(loadbalance = "roundrobin",weight=10) //轮询调用(挨个访问)(权重越高，分配的请求越多)
//@DubboService是： cart模块作为provider角色的注解(给提供服务的service实现类标注@DubboService注解)
@Service
@Slf4j
public class CartServiceImpl  implements ICartService {
    // cart模块的业务逻辑层实现类要装配cart模块的持久层来实现业务
    @Autowired
    private CartMapper cartMapper;

    public void addCart(CartAddDTO cartAddDTO){
        // 业务逻辑层方法的参数是CartAddDTO,但是操作数据库进行新增购物车的方法参数是Cart
        // 所以我们要将参数CartAddDTO类型对象中的属性赋值转换为Cart类型对象
        // 实例化Cart类型对象
        Cart cart=new Cart();
        // 使用BeanUtils工具类将同名属性赋值
        BeanUtils.copyProperties(cartAddDTO,cart);
        // cart对象属性被赋值后,就可以执行数据库新增操作了
        int row=cartMapper.insertCart(cart);
        // 下面可以根据row的值是否为1,判断新增是否成功
        log.info("新增购物车商品完成!{}",cart);
    }

    @Value("${server.port}")
    private  String port;

    public void deleteUserCartCommodity(String userId,String commodityCode){
        System.out.println("*********当前处理人:"+port+"*********");
        // 删除购物车中商品的方法直接调用即可
        cartMapper.deleteCartByUserIdAndCommodityCode(userId,commodityCode);
        // 日志输出
        log.info("购物车删除完成!处理人:{}",port);
    }
}
